package com.bt.controller.user;

import com.bt.constant.JwtClaimsConstant;
import com.bt.dto.YUserLoginDTO;
import com.bt.entity.YddUser;
import com.bt.dto.YddIndexConfigDTO;
import com.bt.dto.YddUserNewDTO;
import com.bt.entity.*;
import com.bt.properties.JwtProperties;
import com.bt.result.PageResult;
import com.bt.result.Result;
import com.bt.service.YddUserIndexService;
import com.bt.utils.JwtUtil;
import com.bt.vo.ShowVO;
import com.bt.vo.YddUserHotVO;
import com.bt.vo.YddUserIndexAllVO;
import com.bt.vo.YddUserNewVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description 前台基础数据接口
 * @Author 张传康
 * @Date 2023-05-04 19:00
 */
@Api(tags = "前台基础数据接口")
@Slf4j
@RestController
@RequestMapping("/index")
public class YddUserIndexController {
    @Autowired
    private JwtProperties jwtProperties;
    @Autowired
    private YddUserIndexService yddUserIndexService;

    /**
     * 注册
     * @param yUserLoginDTO
     * @return
     */
    @PostMapping("/reg")
    public Result reg(@RequestBody YUserLoginDTO yUserLoginDTO){
        // 要注册的信息
        log.info("要注册的信息：{}",yUserLoginDTO);

        // 注册用户
        YddUser yddUser = yddUserIndexService.req(yUserLoginDTO);

        // 创建载荷存储 数据
        // 生成令牌
        Map<String, Object> claims = new HashMap<>();
        // 设置 claims
        claims.put(JwtClaimsConstant.YDD_USER_ID, yddUser.getId());
        claims.put(JwtClaimsConstant.YDD_USERNAME, yddUser.getUsername());

        claims.put(JwtClaimsConstant.YDD_MOBILE, yddUser.getMobile());

        claims.put(JwtClaimsConstant.YDD_SEX, yddUser.getSex());
        claims.put(JwtClaimsConstant.YDD_PASSWORD, yddUser.getPassword());


        // 设置密钥
        String token = JwtUtil.creteJWT(jwtProperties.getUserSecretKey(),
                jwtProperties.getUserTtl(),
                claims);

        HashMap<String, String> map = new HashMap<String, String>();

        map.put("token", token);

        // 返回数据
        return new Result<>("注册成功",map,0);
    }

    /**
     * 热门置顶文章数据(首页)
     * @param page
     * @param limit
     * @return
     */
    @GetMapping("/new")
    public Result<YddUserNewVO> header(Integer page, Integer limit){

        // 获取PageResult
        PageResult pageResult = yddUserIndexService.page(page,limit);

        // 获取num_day;  24小时最新文章数量
        Integer num_day = yddUserIndexService.numDay();
        // 获取num_week;    一周文章最新数量
        Integer num_week = yddUserIndexService.numWeek();
        // 封装数据
        YddUserNewVO yddUserNewVO = YddUserNewVO.builder().list(pageResult)
                .num_day(num_day)
                .num_week(num_week)
                .build();
        return Result.success(yddUserNewVO);
    }

    /**
     * 文章列表数据（根据分类id（cateid)展示文章
     * @param page
     * @param limit
     * @param cateid
     * @return
     */
    @GetMapping("/list")
    public Result<YddUserNewVO> list(Integer page, Integer limit, Integer cateid){
        // 获取PageResult
        PageResult pageResult = yddUserIndexService.pageList(page,limit,cateid);

        // 封装数据
        YddUserNewVO yddUserNewVO = YddUserNewVO.builder().list(pageResult).build();
        return Result.success(yddUserNewVO);
    }

    /**
     * 首页和全局数据
     * @return
     */
    @GetMapping("/index")
    public Result<YddUserIndexAllVO> indexAll(){
        // 查询所有分类
        List<YddCate> allCate = yddUserIndexService.findAllCate();

        // 查询所有友情链接
        List<YddLink> allLink = yddUserIndexService.findAllLink();

        // 查询所有标签
        List<YddTag> allTag = yddUserIndexService.findAllTag();

        //  轮播图数据  advimgpos=15
        List<YddAdvimg> banner = yddUserIndexService.findBanner(15);

        // config
        YddIndexConfigDTO config = null;

        // 详情广告图 advimgpos=13 or advimgpos=15
        List<YddAdvimg> showBanner = yddUserIndexService.findShowBanner(12, 13);

        // 侧边栏图片 advimgpos=14
        List<YddAdvimg> sideBanner = yddUserIndexService.findSideBanner(14);

        YddUserIndexAllVO yddUserIndexAllVO = YddUserIndexAllVO.builder().allCate(allCate)
                .allLink(allLink)
                .allTag(allTag)
                .banner(banner)
                .config(config)
                .showBanner(showBanner)
                .sideBanner(sideBanner)
                .build();

        return Result.success(yddUserIndexAllVO);
    }

    /**
     * 最新文章
     * @return
     */
    @GetMapping("/hot")
    public Result<YddUserHotVO> hot(){

        List<YddUserNewDTO> hostList = yddUserIndexService.findHot();

        YddUserHotVO yddUserHotVO = YddUserHotVO.builder()
                .desc("侧边最新文章")
                .list(hostList)
                .build();
        return Result.success(yddUserHotVO);
    }

    /**
     * 推荐文章
     * @return
     */
    @GetMapping("/recommend")
    public Result<YddUserHotVO> recommend(){

        List<YddUserNewDTO> recommend = yddUserIndexService.findRecommend();

        YddUserHotVO vo = YddUserHotVO.builder()
                .desc("侧边推荐文章")
                .list(recommend)
                .build();

        return Result.success(vo);
    }

    /**
     * 文章详情数据接口
     * @param id
     * @return
     */
    @ApiOperation("文章详情数据接口")
    @GetMapping("/show")
    public Result<ShowVO> show(Integer id){
        ShowVO showVO = yddUserIndexService.show(id);
        return Result.success(showVO);
    }
}
